/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package fase2.pt.iul.sid.controller;

import fase2.pt.iul.sid.database.ComentarioAoEstabelecimentoDAO;
import fase2.pt.iul.sid.database.ComentarioAoPratoDAO;
import fase2.pt.iul.sid.database.EstabelecimentoDAO;
import fase2.pt.iul.sid.database.FactoryConnection;
import fase2.pt.iul.sid.database.PratoDAO;
import fase2.pt.iul.sid.database.UtilizadorDAO;
import fase2.pt.iul.sid.model.ComentarioAoEstabelecimentoModel;
import fase2.pt.iul.sid.model.ComentarioAoPratoModel;
import fase2.pt.iul.sid.model.EstabelecimentoModel;
import fase2.pt.iul.sid.model.PratoModel;
import fase2.pt.iul.sid.model.UtilizadorModel;
import fase2.pt.iul.sid.view.Pesquisa;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.util.LinkedList;
import java.util.List;
import javax.swing.DefaultComboBoxModel;

/**
 *
 * @author Ricardo Marques
 */
public class PesquisaController {
 
    private FactoryConnection fc = null;
    private Pesquisa pesquisaView = null;
    private ComentarioController comentarioController = null;
    private FotografiaController fotografiaController = null;
    private String email_user_logon = null;
    private String PATH_FOTOS_LOCATION = null;
    
    public PesquisaController(FactoryConnection fc, String PATH_FOTOS_LOCATION){
        
        this.fc = fc;
        this.PATH_FOTOS_LOCATION = PATH_FOTOS_LOCATION;
        //ir busrcar dados a bd              
        List<UtilizadorModel> lista_utilizadores = getUtilizadores();
        List<EstabelecimentoModel> lista_estabelecimentos = getEstabelecimentos();
        List<PratoModel> lista_pratos = getPratos(0);

        //Iniciar view de pesquisa
        this.pesquisaView = new Pesquisa(lista_utilizadores, lista_estabelecimentos, lista_pratos);
        this.pesquisaView.adcionarListner(new ListnerPesquisa());
        this.pesquisaView.addBtnActionLister(new ListnerBtns());
        
        //listar todos os comentarios quando inicia
        this.pesquisaView.getjComboBox1().setSelectedIndex(0);
        
    }
    
    public void criaPesquisa(String email_utilizador_cria_pesquisa){
         email_user_logon = email_utilizador_cria_pesquisa;
    }
    
    public String getTipo(){
        
        return "";
    } 
    
    public boolean verComentario(String email_utilizador_realiza_pedido, String email_utilizador_comentador, int id_Estabelecimento, int id_Prato, int avaliacao, String comentario, boolean foto){
        
        boolean ret = false;
        
        return ret;
        
    }
    
    public boolean pesquisaComentarios(String email_utilizador_comentador, int id_Estabelecimento,int id_Prato, String comentario, int avaliacao, boolean foto){
        
        boolean ret = false;
        
        return ret;
        
    }
    
    public boolean verFotografia(String email_utilizador_comentador, int id_Estabelecimento, int id_Prato, String comentario, int avaliacao, boolean foto){
        
        boolean ret = false;
        
        return ret;
        
    }
    
    public void sair(){
        System.exit(0);
    }
    
    private List<UtilizadorModel> getUtilizadores(){
        
        UtilizadorDAO userDao =  new UtilizadorDAO(fc);
        return userDao.getUtilizadores();
        
    }
    
    private List<EstabelecimentoModel> getEstabelecimentos(){
        
        EstabelecimentoDAO estabelecimentoDao =  new EstabelecimentoDAO(fc);
        return estabelecimentoDao.getEstabelecimentos();
    }
    
    private List<PratoModel> getPratos(int idEstabelecimento){
        
        PratoDAO pratoDao =  new PratoDAO(fc);
        return pratoDao.getPratos(idEstabelecimento);
        
    }
    
    
    class ListnerPesquisa implements ActionListener{

        @Override
        public void actionPerformed(ActionEvent e) {
            
            UtilizadorModel user = (UtilizadorModel)pesquisaView.getjComboBox1().getSelectedItem();
            EstabelecimentoModel estabelecimento = (EstabelecimentoModel)pesquisaView.getjComboBox2().getSelectedItem();
            PratoModel prato = (PratoModel)pesquisaView.getjComboBox3().getSelectedItem();
            int aval = Integer.parseInt((String)pesquisaView.getjComboBox4().getSelectedItem());
            String text = pesquisaView.getjTextField1().getText();
            boolean foto = pesquisaView.getjCheckBox1().isSelected();
            
            ComentarioAoEstabelecimentoDAO ce = new ComentarioAoEstabelecimentoDAO(fc);
            ComentarioAoPratoDAO cp = new ComentarioAoPratoDAO(fc);
            
            List<ComentarioAoEstabelecimentoModel> lista_ce = new LinkedList<ComentarioAoEstabelecimentoModel>();
            List<ComentarioAoPratoModel> lista_cp = new LinkedList<ComentarioAoPratoModel>();
            
            if(prato.getIdPrato()==0){
                lista_ce = ce.getComentariosEstabelecimento(user.getEmail(), estabelecimento.getAtributeIdEstablecimento(), text, aval, foto);
            }
            
            lista_cp = cp.getComentariosPrato(user.getEmail(), prato.getIdPrato(), estabelecimento.getAtributeIdEstablecimento(), text, aval, foto);
            
            int selectedIdex = pesquisaView.getjComboBox3().getSelectedIndex();
            pesquisaView.getjComboBox3().setModel(new DefaultComboBoxModel(getPratos(estabelecimento.getAtributeIdEstablecimento()).toArray()));
            pesquisaView.getjComboBox3().setSelectedIndex(selectedIdex);
            pesquisaView.mostraComentarios(lista_ce,lista_cp);

        }
        
    }
    
    class ListnerBtns implements ActionListener{

        @Override
        public void actionPerformed(ActionEvent e) {
            
            int id_estabelecimento = 0;
            int id_prato = 0;
            String email_utilizador_criou_comentario = "";
            if(pesquisaView.getjTable1().getSelectedRow() != -1){
                id_estabelecimento = Integer.parseInt(pesquisaView.getAuxVectorSelection().get(pesquisaView.getjTable1().getSelectedRow()).get(0).toString());
                id_prato = Integer.parseInt(pesquisaView.getAuxVectorSelection().get(pesquisaView.getjTable1().getSelectedRow()).get(1).toString());
                email_utilizador_criou_comentario = (String) pesquisaView.getjTable1().getValueAt(pesquisaView.getjTable1().getSelectedRow(), 1);
            }
            
            if (e.getSource() == pesquisaView.getjButton5()) {
                
                sair();
                
            }
            else if(e.getSource() == pesquisaView.getjButton3()){
                
                if(id_estabelecimento!=0){
                    comentarioController =  new ComentarioController(fc, pesquisaView,null);
                    if(id_prato==0){
                        comentarioController.verComentarioEstabelecimento(id_estabelecimento, email_user_logon, email_utilizador_criou_comentario);
                    }else{
                        comentarioController.verComentarioPrato(id_prato, id_estabelecimento, email_user_logon, email_utilizador_criou_comentario);
                    }
                }
                
            }
            else if(e.getSource() == pesquisaView.getjButton4()){
                
                fotografiaController =  new FotografiaController(fc, PATH_FOTOS_LOCATION, email_user_logon);
                
                if(id_estabelecimento!=0){
                    
                    if(id_prato==0){
                        fotografiaController.mostrarFotosEstabelecimento(id_estabelecimento);
                    }else{
                        fotografiaController.mostrarFotosPrato(id_prato);
                    }
                }else{
                    
                    fotografiaController.mostrarFotoPerfil(email_user_logon);
                    
                }
            }
            else{ 
                
            }
        }
        
    }
    
}
